前幾天,[Day25] 使用第三方庫--以Glog為例'、[Day 21] 使用第三方庫--以json為例、 [Day 20] 使用第三方庫--以OpenCV為例,都是要自己手動下載專案中需要使用到的第三方函式庫。
當專案中的依賴項不多的時候還好,一旦專案規模越來越大,有一天需要移植到其他平台,裝依賴真的會裝到懷疑人生,因此今天要介紹CMake中一個可以幫我們自動安裝依賴的模組 FetchContent。
FetchContent_Declare(
<name>
GIT_REPOSITORY <url>
[GIT_TAG <version>]
)
<name>:依賴名稱
<url>:github的網址
<version>:特定的Releases版本
FetchContent_MakeAvailable(<name>)
<name>:FetchContent_Declare裡面的專案名稱
1. 找到Release版本
找到依賴的 Github 頁面,通常在右邊紅框內會有Releases版本,像今天的 glog 就是 0.6.0 版。
2. 編輯 Main / CMakeLists.txt
cmake_minimum_required(VERSION 3.22)
# 根據自己的cmake版本來設定最小版本,要小於當前版本
project(cmake_totorial VERSION 1.0.0 LANGUAGES CXX)
# 設定專案名稱為cmake_totorial,版本為1.0.0,且此項目使用C++
include(FetchContent)
FetchContent_Declare(
glog
GIT_REPOSITORY https://github.com/google/glog.git
GIT_TAG v0.6.0
)
# 專案名稱為glog,
# 從 https://github.com/google/glog.git 上取得
# 版本為v0.6.0
FetchContent_MakeAvailable(glog)
# 讓glog專案內部的CMakeLists.txt內容生效,像是 add_subdirectory(), include() 和 file()
add_executable(main src/main.cpp)
# 將main.cpp編譯成可執行文件main
target_link_libraries(main PUBLIC glog::glog)
# 將在glog這個命名空間中的庫鍊結到執行檔main
3. 編譯並執行
$ cd build
$ cmake ..
$ make
$ ./main